package com.sky.service.impl;

import com.sky.context.BaseContext;
import com.sky.dto.ShoppingCartDTO;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.entity.ShoppingCart;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.mapper.ShoppingCartMapper;
import com.sky.service.ShoppingCartService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @author wfyn
 * @date 2023/10/7
 */
@Service
@Slf4j
public class ShoppingCartImpl implements ShoppingCartService {
    /**
     * 添加购物车
     *
     * @param shoppingCartDTO
     */

    @Autowired
    ShoppingCartMapper shoppingCartMapper;
    @Autowired
    DishMapper dishMapper;
    @Autowired
    SetmealMapper setmealMapper;

    /**
     * 添加购物车项
     *
     * @param shoppingCartDTO 购物车数据传输对象
     */
    public void addShoppingCart(ShoppingCartDTO shoppingCartDTO) {

        // 创建一个新的购物车项
        ShoppingCart shoppingCart = new ShoppingCart();

        // 将购物车数据传输对象的属性复制到购物车项对象中
        BeanUtils.copyProperties(shoppingCartDTO, shoppingCart);

        // 获取当前用户的ID
        Long userId = BaseContext.getCurrentId();

        // 设置购物车项的用户ID
        shoppingCart.setUserId(userId);

        // 根据用户ID查询购物车项列表
        List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);

        // 如果购物车项列表不为空且不为空列表
        if (list != null && !list.isEmpty()) {
            // 获取第一个购物车项（通常只会有一个）
            ShoppingCart cart = list.get(0);

            // 增加购物车项中商品的数量
            cart.setNumber(cart.getNumber() + 1);

            // 更新购物车项中商品数量
            shoppingCartMapper.updateNumberById(cart);


        } else {

            // 获取购物车项中的商品ID
            Long dishId = shoppingCartDTO.getDishId();

            // 如果商品ID不为空
            if (dishId != null) {
                // 根据商品ID查询商品信息
                Dish dish = dishMapper.getById(dishId);

                // 设置购物车项的商品名称、价格和图片
                shoppingCart.setName(dish.getName());
                shoppingCart.setAmount(dish.getPrice());
                shoppingCart.setImage(dish.getImage());
            } else {
                // 获取购物车项中的套餐ID
                Long setmealId = shoppingCartDTO.getSetmealId();

                // 根据套餐ID查询套餐信息
                Setmeal setmeal = setmealMapper.getById(setmealId);

                // 设置购物车项的套餐名称、价格和图片
                shoppingCart.setName(setmeal.getName());
                shoppingCart.setAmount(setmeal.getPrice());
                shoppingCart.setImage(setmeal.getImage());
            }

            // 设置购物车项的数量为1
            shoppingCart.setNumber(1);

            // 设置购物车项的创建时间为当前时间
            shoppingCart.setCreateTime(LocalDateTime.now());

            // 插入购物车项到数据库
            shoppingCartMapper.insert(shoppingCart);
        }
    }

    @Override
    public List<ShoppingCart> showShoppingCart() {

        // 获取当前用户ID
        Long userId = BaseContext.getCurrentId();

        ShoppingCart cart = ShoppingCart.builder()
                .userId(userId)
                .build();

        // 查询当前用户的购物车列表
        return shoppingCartMapper.list(cart);
    }

    @Override
    public void cleanShoppingCart() {


        // 获取当前用户ID
        Long userId = BaseContext.getCurrentId();

        // 删除当前用户的购物车列表
        shoppingCartMapper.deleteByUserId(userId);
    }

    @Override
    public void subShoppingCart(ShoppingCartDTO shoppingCartDTO) {

        // 创建一个新的购物车项
        ShoppingCart shoppingCart = new ShoppingCart();

        // 将购物车数据传输对象的属性复制到购物车项对象中
        BeanUtils.copyProperties(shoppingCartDTO, shoppingCart);

        // 获取当前用户的ID
        Long userId = BaseContext.getCurrentId();

        // 设置购物车项的用户ID
        shoppingCart.setUserId(userId);

        // 根据用户ID查询购物车项列表
        List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);


        // 获取第一个购物车项（通常只会有一个）
        ShoppingCart cart = list.get(0);

        Integer number = cart.getNumber();

        if(number!=1)
        {
            // 减少购物车项中商品的数量
            cart.setNumber(cart.getNumber() - 1);

            // 更新购物车项中商品数量
            shoppingCartMapper.updateNumberById(cart);
        }
        else {

            // 删除购物车项
            shoppingCartMapper.deleteByShoppingCart(cart);
        }





    }


}
